package com.liuhouse.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.liuhouse.dto.TagListDto;
import com.liuhouse.pojo.Tag;
import com.liuhouse.mapper.TagMapper;
import com.liuhouse.service.ITagService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.liuhouse.utils.BeanCopyUtils;
import com.liuhouse.utils.ResponseResult;
import com.liuhouse.vo.PageVo;
import com.liuhouse.vo.TagVo;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.util.List;

/**
 * <p>
 * 标签 服务实现类
 * </p>
 *
 * @author liuhouse
 * @since 2024-01-27
 */
@Service
public class TagServiceImpl extends ServiceImpl<TagMapper, Tag> implements ITagService {

    //查询标签列表
    @Override
    public ResponseResult<PageVo> pageTagList(Integer pageNum, Integer pageSize, TagListDto tagListDto) {
       //分页查询的条件 。 模糊 + 分页
        LambdaQueryWrapper<Tag> queryWrapper = new LambdaQueryWrapper<>();
        //根据名字进行模糊查询
        //第二个第三个参数是互相比较,第一个参数是判空,当第一个参数为false的时候,当用户没有查询条件的时候,就不会去比较后面两个参数
        queryWrapper.like(StringUtils.hasText(tagListDto.getName()) , Tag::getName , tagListDto.getName());
        //第二个第三个参数是互相比较的,第一个参数是判空,当用户没有查询条件的时候,就不去比较后面两个参数
        queryWrapper.like(StringUtils.hasText(tagListDto.getRemark()), Tag::getRemark , tagListDto.getRemark());

        //分页查询
        Page<Tag> page = new Page<>();
        page.setCurrent(pageNum);
        page.setSize(pageSize);
        //查询出标签的分页数据
        page(page , queryWrapper);

        //封装数据返回,PageVo是我们在liuhouse-framework工程写的类
        PageVo pageVo = new PageVo(page.getRecords(), page.getTotal());
        return ResponseResult.okResult(pageVo);

    }

    //查询所有的标签
    @Override
    public List<TagVo> listAllTag() {
        LambdaQueryWrapper<Tag> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.select(Tag::getId , Tag::getName , Tag::getRemark);
        List<Tag> list = list(queryWrapper);
        //进行拷贝转化然后返回
        List<TagVo> tagVos = BeanCopyUtils.copyBeanList(list, TagVo.class);
        return tagVos;
    }
}
